#include <stdio.h>
long long A=1992919, B=18181971;
FILE *f;
char s[20];
int ts=1;
int next()
{
	A=(A*13166771+B)%1000000007;
	B=(B*67771+A)%1000000007;
	return A;
}
void createtest() { sprintf(s, "%03d", ts); ts++; f=fopen(s, "w"); }
#define N 1010
int m[N][N];
void gen0()
{
	createtest();
	fprintf(f, "3 5\n1 2\n1 3\n3 2\n2 3\n2 1\n");
	createtest();
	fprintf(f, "1 0\n");
	createtest();
	fprintf(f, "1 1\n1 1\n");
	createtest();
	fprintf(f, "2 0\n");
	createtest();
	fprintf(f, "2 1\n1 2\n");
	createtest();
	fprintf(f, "2 1\n2 1\n");
	createtest();
	fprintf(f, "2 4\n2 2\n2 1\n1 2\n1 1\n");
}
void gen1(int n, int k, int t)
{
	int i, j, l;
	createtest();
	for(fprintf(f, "%d %d\n", n*t, k*t); t--; )
	{
		for(i=0; i<n; i++)
			for(j=0; j<n; m[i][j]=0, j++);
		for(l=k; l; )
		{
			i=next()%n;
			j=next()%n;
			if(m[i][j]) continue;
			m[i][j]=1;
			fprintf(f, "%d %d\n", i+n*t+1, j+n*t+1);
			l--;
		}
	}
}
void gen2(int n, int k)
{
	createtest();
	int i, j;
	for(fprintf(f, "%d %d\n", n, k), j=n-1; j>=0 && k; j--)
		for(i=0; i+j<n && k; fprintf(f, "%d %d\n", i+1, j+1), k--, i++);
}
int main()
{
	int i;
	gen0();
	for(i=0; i<5; i++)
		gen1(10, 20, 1);
	gen1(1000, 100000, 1);
	gen1(1000, 50000, 1);
	gen1(1000, 20000, 1);
	gen1(1000, 5000, 1);
	gen1(1000, 1000, 1);
	gen1(500, 2000, 2);
	gen1(100, 500, 10);
	gen1(20, 30, 50);
	gen1(20, 50, 50);
	gen1(20, 100, 50);
	gen1(10, 12, 100);
	gen1(10, 15, 100);
	gen1(10, 20, 100);
	gen1(6, 10, 150);
	gen2(1000, 100000);
	return 0;
}
/*
6 10
2 1
5 5
1 5
5 1
2 2
6 2
5 2
3 1
4 5
5 4
*/